package com.qf.oop.user;

import java.util.Random;
import java.util.Scanner;

/**
 * 菜单类，
 * 负责给用户展示菜单，并接收用户的输入
 * 输入1 注册，2 登录，3 退出
 */
public class Menu {

    // 给Menu类添加一个实例属性 ，类型为UserManager
    UserManager userManager = new UserManager();

    // 声明一个用来打印banner的实例属性
//    Banner01 banner = new Banner01();
//    Banner02 banner = new Banner02();

    // 多态的应用场景一 （最重要的场景，以后Controller和Service两个类中的代码，会大量应用这种写法）
    private Banner banner;

    public Banner getBanner() {
        return banner;
    }

    public void setBanner(Banner banner) {
        this.banner = banner;
    }

    public Menu() {
        // 不是必须在这里进行初始化，这种写法是一种可选的方式
//        userManager = new UserManager();
//        banner = new Banner02();
    }

    public Menu(UserManager userManager, Banner01 banner) {
        this.userManager = userManager;
        this.banner = banner;
    }

    public void show() {
        System.out.println("欢迎使用用户管理系");
        // 调用一个能够打印 banner 图形的对象，进行banner的打印
        banner.printBanner();

        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("1. 注册\t 2. 登录\t 3. 退出");
            int item = sc.nextInt();
            switch (item) {
                case 1:
                    System.out.println("请输入用户名:");
                    String username = sc.next();
                    System.out.println("请输入密码:");
                    String password = sc.next();
                    // 完成注册 ？
                    // 在哪里创建 UserManager对象呢？ 作为实例属性
                    boolean regist = userManager.regist(username, password);
                    if (regist){
                        System.out.println("注册成功，可以进行登录啦");
                    }else {
                        System.out.println("注册失败了，请检查用户名和密码");
                    }
                    break;
                case 2:
                    int code = createCode();
                    System.out.println("请输入验证码:"+code);
                    int userCode = sc.nextInt();
                    if (userCode!=code){
                        System.out.println("验证码错误");
                        break;
                    }
                    System.out.println("请输入用户名:");
                    String loginUsername = sc.next();
                    System.out.println("请输入密码:");
                    String loginPassword = sc.next();
                    boolean login = userManager.login(loginUsername, loginPassword);
                    if (login){
                        System.out.println("登录成功！");
                    }else {
                        System.out.println("登录失败");
                    }
                    break;
                case 3:
                    System.out.println("退出");
                    return; // show 方法结束了
                default:
                    System.out.println("输入错误");
                    break;
            }
        }


    }

    /**
     * 生成验证码
     * @return 1000-9999之间的四位整数
     */
    public int createCode() {
        Random random = new Random();
        int i = random.nextInt(9000)+1000;  // [0,8999]  ->  [1000,9999]
        return i ;
    }


}
